const { DataTypes } = require('sequelize');
const { sequelize } = require('../library/sequelize.js');

// 投票记录模型
const voteRecordModel = sequelize.define('ly_vote_record', {
    vote_record_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        primaryKey: true,
        autoIncrement: true,
        comment: '投票记录'
    },
    vote_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票活动ID'
    },
    vote_entry_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票作品ID'
    },
    user_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票微信用户ID'
    },
    weight: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '得分权重默认1'
    },
    is_delete: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否删除'
    },
    record_type: {
        type: DataTypes.TINYINT,
        allowNull: false,
        comment: '投票类型0:规则投票，默认，1额外投票'
    },
    vote_extra_id: {
        type: DataTypes.INTEGER,
        allowNull: false,
        comment: '额外投票关联ID'
    },
    create_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '创建时间'
    },
    update_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '更新时间'
    }
}, {
    tableName: 'ly_vote_record',
    timestamps: false,
    comment: '投票记录表'
});

// 获取创建时的默认值
function getCreateDefaults() {
    const now = Math.floor(Date.now() / 1000);
    return {
        create_time: now,
        update_time: now
    };
}

// 获取更新时的默认值
function getUpdateDefaults() {
    return {
        update_time: Math.floor(Date.now() / 1000)
    };
}

// 初始化模型
async function initModel() {
    try {
        // 测试数据库连接
        await sequelize.authenticate();
        console.log('✅ 投票记录模型数据库连接成功');

        // 同步模型到数据库
        await voteRecordModel.sync({ alter: false });
        console.log('✅ 投票记录模型同步成功');

        // 输出模型字段信息
        console.log('🔍 投票记录模型字段数量:', Object.keys(voteRecordModel.rawAttributes).length);
        console.log('📋 投票记录模型字段列表:', Object.keys(voteRecordModel.rawAttributes));

        return true; // 返回成功状态

    } catch (error) {
        console.error('❌ 投票记录模型初始化失败:', error);
        return false; // 返回失败状态
    }
}

module.exports = {
    voteRecordModel,
    getCreateDefaults,
    getUpdateDefaults,
    initModel
};